<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script type="text/javascript">
    function outer() {
        var m1=100;//局部变量
        m2=200;//全局
        function inner() {
            var m3=200;//局部变量
            m4=400;//全局
        }

    }
    //这只是一个循环代码块，不是函数
    for(var i=0;i<=2;i++){
         var m5=500;//全局
    }
    console.log(m5);

    var a=10;
    var b=20;
    if(a<b){
        var m6=600;//全局
    }
  //！！！！！！只有在函数里面定义的才是局部变量，并且必须用var声明
    //todo  es6新增加const定义常量（不可改变的量）   let定义变量（可以改变的量）

     let n1=100;//全局变量
     console.log(n1);
      function sum2() {
          let  n2=100;//局部变量
          n3=300;//全局的
      }
       sum2();
//      console.log(n2);
      console.log(n3);


      for(var index=0;index<=2;index++){
          let  n4=400;//局部
      }
//      console.log(n4);

      if(a<b){
          let  n5=500;//局部
          console.log(n5);
      }
    {
      let  n6=600;

    }
//    console.log(n6);

    /**
     * 总结   var   let
     *
     * （1）var没有块的概念，只有在函数里面定义的才是局部变量，其他的{}里面定义的
     * 全都是全局变量
     *
     * （2）let有块的概念,只要是定义在{}里面，那么变量就是局部变量，作用域只在{}里面
     * 起作用，所以多用let定义变量，因为局部变量脱离了{}在内存中就消失了
     *
     * (3)var存在声明提前，let不存在声明提前
     *
     *
     *
     */
     //声明提前------在执行脚本的时候最先开始的操作就是变量的声明 var s1
    console.log(s1);
     var s1=100;
     console.log(s1);

//    console.log(s2);
     let s2=100;
    console.log(s2);

       //todo  定义常量-----常量的命名必须全部大写
       //常量声明的同时必须赋值，在赋值之后不可以改变常量的值
       const  USER_NAME="ABC";
//       USER_NAME="CBD";







</script>
</body>
</html>